package log

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"
	"time"

	//"time"

	"github.com/rs/zerolog"
)

var InfoLogger zerolog.Logger
var ErrLogger zerolog.Logger

func init() {
	// 创建日志文件
	logFile, err := os.OpenFile(fmt.Sprintf("log/info/%v.log", time.Now().Format("2006-01-02")), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		fmt.Println("无法创建日志文件:", err)
		os.Exit(1)
	}

	// 配置 zerolog
	InfoLogger = zerolog.New(logFile).
		With().
		Timestamp().
		Caller(). // 启用调用者信息
		Logger()

	// 创建日志文件
	logErrFile, err := os.OpenFile(fmt.Sprintf("log/error/%v.log", time.Now().Format("2006-01-02")), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		fmt.Println("无法创建日志文件:", err)
		os.Exit(1)
	}

	// 配置 zerolog
	ErrLogger = zerolog.New(logErrFile).
		With().
		Timestamp().
		Caller(). // 启用调用者信息
		Logger()
}

// LogInfo 记录信息级别的日志
func LogInfo(msg string) {
	file, line := getCallerInfo()
	InfoLogger.Info().Str("file", file).Int("line", line).Msg(msg)
}

// LogError 记录错误级别的日志
func LogError(err error) {
	file, line := getCallerInfo()
	ErrLogger.Error().Str("file", file).Int("line", line).Err(err).Msg("发生错误")
}

// getCallerInfo 获取调用日志的文件名和行号
func getCallerInfo() (string, int) {
	_, file, line, ok := runtime.Caller(2)
	if !ok {
		return "unknown", 0
	}
	return filepath.Base(file), line
}
